home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / xml4j.jar / com / ibm / xml / parser / Parser.class (.txt) < prev    next >
Encoding:
Java Class File  |  1999-08-30  |  10.5 KB  |  419 lines

  1. package com.ibm.xml.parser;
  2.  
  3. import com.ibm.xml.framework.AttrPool;
  4. import com.ibm.xml.framework.XMLParser;
  5. import com.ibm.xml.framework.XMLValidationHandler;
  6. import com.ibm.xml.internal.DefaultScanner;
  7. import com.ibm.xml.internal.ErrorCode;
  8. import com.ibm.xml.parsers.NonValidatingTXDOMParser;
  9. import com.ibm.xml.parsers.TXDOMParser;
  10. import java.io.IOException;
  11. import java.io.InputStream;
  12. import java.io.Reader;
  13. import java.util.Hashtable;
  14. import java.util.Vector;
  15. import org.w3c.dom.Node;
  16. import org.xml.sax.InputSource;
  17. import org.xml.sax.Locator;
  18. import org.xml.sax.SAXException;
  19.  
  20. public class Parser extends TXDOMParser {
  21.    private static final String ALL_TAG_NAMES = " ALL ";
  22.    private static final boolean DEBUG = false;
  23.    StreamProducer streamProducer;
  24.    ErrorListener errorListener;
  25.    int errorCount;
  26.    int validityFailureCount;
  27.    int warnCount;
  28.    boolean isKeepComment;
  29.    boolean isEndBy1stError;
  30.    boolean isProcessNamespace;
  31.    boolean isProcessExternalDTD;
  32.    boolean isWarningRedefinedEntity;
  33.    boolean isWarningNoXMLDecl;
  34.    boolean isWarningNoDoctypeDecl;
  35.    ReferenceHandler referenceHandler;
  36.    TagHandler tagHandler;
  37.    Vector preRootHandlers;
  38.    Vector piHandlers;
  39.    Hashtable elementHandlerHash;
  40.    SAXDriver saxdriver;
  41.  
  42.    public Parser(String var1) {
  43.       this(var1, (ErrorListener)null, (StreamProducer)null);
  44.    }
  45.  
  46.    public Parser(String var1, ErrorListener var2, StreamProducer var3) {
  47.       Stderr var4 = var2 != null && var3 != null ? null : new Stderr(var1);
  48.       this.errorListener = (ErrorListener)(var2 != null ? var2 : var4);
  49.       this.streamProducer = (StreamProducer)(var3 != null ? var3 : var4);
  50.       this.initParser();
  51.    }
  52.  
  53.    private void initParser() {
  54.       this.setAllowJavaEncodingName(false);
  55.       this.setEndBy1stError(true);
  56.       this.setExpandEntityReferences(false);
  57.       this.setKeepComment(true);
  58.       this.setProcessExternalDTD(true);
  59.       this.setProcessNamespace(false);
  60.       this.setWarningNoDoctypeDecl(false);
  61.       this.setWarningNoXMLDecl(true);
  62.       this.setWarningRedefinedEntity(true);
  63.       Handler var1 = new Handler(this);
  64.       ((XMLParser)this).setDocumentHandler(var1);
  65.       ((XMLParser)this).setDocumentTypeHandler(var1);
  66.       ((XMLParser)this).setErrorHandler(var1);
  67.       ((XMLParser)this).getEntityHandler().setEntityResolver(var1);
  68.    }
  69.  
  70.    public void setElementFactory(TXDocument var1) {
  71.       super.fDocument = var1;
  72.    }
  73.  
  74.    public Source getInputStream(String var1, String var2, String var3) throws IOException {
  75.       return this.streamProducer.getInputStream(var1, var2, var3);
  76.    }
  77.  
  78.    public void closeInputStream(Source var1) {
  79.       this.streamProducer.closeInputStream(var1);
  80.    }
  81.  
  82.    public void loadCatalog(Reader var1) throws IOException {
  83.       this.streamProducer.loadCatalog(var1);
  84.    }
  85.  
  86.    public void setTagHandler(TagHandler var1) {
  87.       this.tagHandler = var1;
  88.    }
  89.  
  90.    public void setReferenceHandler(ReferenceHandler var1) {
  91.       this.referenceHandler = var1;
  92.    }
  93.  
  94.    public void addPreRootHandler(PreRootHandler var1) {
  95.       if (this.preRootHandlers == null) {
  96.          this.preRootHandlers = new Vector();
  97.       }
  98.  
  99.       this.preRootHandlers.addElement(var1);
  100.    }
  101.  
  102.    public void addPIHandler(PIHandler var1) {
  103.       if (this.piHandlers == null) {
  104.          this.piHandlers = new Vector();
  105.       }
  106.  
  107.       this.piHandlers.addElement(var1);
  108.    }
  109.  
  110.    public void addElementHandler(ElementHandler var1) {
  111.       this.addElementHandler(var1, " ALL ");
  112.    }
  113.  
  114.    public void addElementHandler(ElementHandler var1, String var2) {
  115.       if (this.elementHandlerHash == null) {
  116.          this.elementHandlerHash = new Hashtable();
  117.       }
  118.  
  119.       Vector var3 = (Vector)this.elementHandlerHash.get(var2);
  120.       if (var3 == null) {
  121.          var3 = new Vector();
  122.          this.elementHandlerHash.put(var2, var3);
  123.       }
  124.  
  125.       var3.addElement(var1);
  126.    }
  127.  
  128.    void setSAXDriver(SAXDriver var1) {
  129.       this.saxdriver = var1;
  130.       if (var1 != null) {
  131.          ((NonValidatingTXDOMParser)this).setNormalizeTextNodes(false);
  132.       }
  133.  
  134.    }
  135.  
  136.    public int getNumberOfErrors() {
  137.       return this.errorCount + this.validityFailureCount;
  138.    }
  139.  
  140.    public int getNumberOfWarnings() {
  141.       return this.warnCount;
  142.    }
  143.  
  144.    public void setKeepComment(boolean var1) {
  145.       this.isKeepComment = var1;
  146.    }
  147.  
  148.    public void setExpandEntityReferences(boolean var1) {
  149.       super.setExpandEntityReferences(var1);
  150.    }
  151.  
  152.    public void setProcessExternalDTD(boolean var1) {
  153.       this.isProcessExternalDTD = var1;
  154.    }
  155.  
  156.    public void setProcessNamespace(boolean var1) {
  157.       this.isProcessNamespace = var1;
  158.       if (var1) {
  159.          ((XMLParser)this).setValidationHandler((XMLValidationHandler)null);
  160.       } else {
  161.          ((XMLParser)this).useDefaultValidationHandler();
  162.       }
  163.    }
  164.  
  165.    public void setAllowJavaEncodingName(boolean var1) {
  166.       super.setAllowJavaEncodingName(var1);
  167.    }
  168.  
  169.    public void setPreserveSpace(boolean var1) {
  170.       throw new IllegalArgumentException("setPreserveSpace not supported");
  171.    }
  172.  
  173.    public void setEndBy1stError(boolean var1) {
  174.       this.isEndBy1stError = var1;
  175.       super.setContinueAfterFatalError(!var1);
  176.    }
  177.  
  178.    public TXDocument readStream(InputStream var1) {
  179.       return this.readStream(new Source(var1));
  180.    }
  181.  
  182.    public TXDocument readStream(Reader var1) {
  183.       return this.readStream(new Source(var1));
  184.    }
  185.  
  186.    public TXDocument readStream(Source var1) {
  187.       try {
  188.          InputSource var2 = new InputSource();
  189.          var2.setByteStream(var1.getInputStream());
  190.          var2.setCharacterStream(var1.getReader());
  191.          var2.setEncoding(var1.getEncoding());
  192.          if (this.streamProducer instanceof Stderr) {
  193.             Stderr var3 = (Stderr)this.streamProducer;
  194.             var2.setPublicId(var3.getPublicId());
  195.             var2.setSystemId(var3.getSystemId());
  196.          }
  197.  
  198.          ((XMLParser)this).parse(var2);
  199.       } catch (Exception var6) {
  200.       } finally {
  201.          ;
  202.       }
  203.  
  204.       return (TXDocument)((NonValidatingTXDOMParser)this).getDocument();
  205.    }
  206.  
  207.    public DTD readDTDStream(InputStream var1) throws IOException {
  208.       return this.readDTDStream(new Source(var1));
  209.    }
  210.  
  211.    public DTD readDTDStream(Reader var1) throws IOException {
  212.       return this.readDTDStream(new Source(var1));
  213.    }
  214.  
  215.    public DTD readDTDStream(Source var1) throws IOException {
  216.       TXDocument var2 = super.fDocument;
  217.  
  218.       try {
  219.          if (super.fDocument == null) {
  220.             super.fDocument = new TXDocument();
  221.          } else {
  222.             super.fDocument = (TXDocument)super.fDocument.cloneNode(false);
  223.          }
  224.  
  225.          InputSource var3 = new InputSource();
  226.          var3.setByteStream(var1.getInputStream());
  227.          var3.setCharacterStream(var1.getReader());
  228.          var3.setEncoding(var1.getEncoding());
  229.          this.parseDTD(var3);
  230.       } catch (IOException var7) {
  231.          this.errorString1(88, ((Throwable)var7).getMessage());
  232.       } catch (Exception var8) {
  233.       } finally {
  234.          ;
  235.       }
  236.  
  237.       DTD var10 = super.fDocument.getDTD();
  238.       super.fDocument = var2;
  239.       return var10;
  240.    }
  241.  
  242.    public final void parseDTD(InputSource var1) throws SAXException, IOException {
  243.       if (super.fParseInProgress) {
  244.          throw new SAXException("parse may not be called while parsing");
  245.       } else {
  246.          if (super.fNeedReset) {
  247.             ((TXDOMParser)this).resetOrCopy();
  248.          }
  249.  
  250.          try {
  251.             ((NonValidatingTXDOMParser)this).checkHandlers();
  252.             super.fParseInProgress = true;
  253.             super.fNeedReset = true;
  254.             ((DefaultScanner)super.fScanner).scanDTD(var1);
  255.             super.fParseInProgress = false;
  256.          } catch (SAXException var3) {
  257.             super.fParseInProgress = false;
  258.             throw var3;
  259.          } catch (IOException var4) {
  260.             super.fParseInProgress = false;
  261.             throw var4;
  262.          } catch (Exception var5) {
  263.             super.fParseInProgress = false;
  264.             throw new SAXException(var5);
  265.          }
  266.       }
  267.    }
  268.  
  269.    public void addNoRequiredAttributeHandler(NoRequiredAttributeHandler var1) {
  270.       throw new IllegalArgumentException("addNoRequiredAttributeHandler is not supported");
  271.    }
  272.  
  273.    public void setErrorNoByteMark(boolean var1) {
  274.       throw new IllegalArgumentException("setErrorNoByteMark not supported");
  275.    }
  276.  
  277.    public int getReaderBufferSize() {
  278.       throw new IllegalArgumentException("setReaderBufferSize is not supported");
  279.    }
  280.  
  281.    public void setReaderBufferSize(int var1) {
  282.       throw new IllegalArgumentException("setReaderBufferSize is not supported");
  283.    }
  284.  
  285.    public void setWarningRedefinedEntity(boolean var1) {
  286.       this.isWarningRedefinedEntity = var1;
  287.    }
  288.  
  289.    public void setWarningNoXMLDecl(boolean var1) {
  290.       this.isWarningNoXMLDecl = var1;
  291.    }
  292.  
  293.    public void setWarningNoDoctypeDecl(boolean var1) {
  294.       this.isWarningNoDoctypeDecl = var1;
  295.    }
  296.  
  297.    public void stop() {
  298.       ((XMLParser)this).getParserState().getScanner().stop();
  299.    }
  300.  
  301.    protected void handleError(String var1, String var2) throws Exception {
  302.       Locator var3 = ((XMLParser)this).getLocator();
  303.       this.errorListener.error(var3.getSystemId(), var3.getLineNumber(), var3.getColumnNumber(), var1, var2);
  304.       super.handleError(var1, var2);
  305.    }
  306.  
  307.    public void reset() {
  308.       super.reset();
  309.       this.warnCount = 0;
  310.       this.validityFailureCount = 0;
  311.       this.errorCount = 0;
  312.       this.errorListener = null;
  313.       this.streamProducer = null;
  314.       this.tagHandler = null;
  315.       this.preRootHandlers = null;
  316.       this.piHandlers = null;
  317.       this.elementHandlerHash = null;
  318.       this.referenceHandler = null;
  319.    }
  320.  
  321.    Node getCurrentNode() {
  322.       return super.fCurrentNode;
  323.    }
  324.  
  325.    void setRealParent(Node var1) {
  326.       Node var2 = (Node)super.fNodeStack.peek();
  327.       var2.removeChild(var2.getLastChild());
  328.       var2.appendChild(var1);
  329.    }
  330.  
  331.    TXElement getCurrentParent() {
  332.       return (TXElement)super.fCurrentParent;
  333.    }
  334.  
  335.    private final void errorString1(int var1, String var2) throws Exception {
  336.       String var3 = ErrorCode.getErrorKey(var1);
  337.       if (((XMLParser)this).errorHandlingEnabled() || ((XMLParser)this).isFatal(var3)) {
  338.          String[] var4 = new String[]{var2};
  339.          String var5 = ((XMLParser)this).getErrorMsgString(var3, var4);
  340.          this.handleError(var3, var5);
  341.       }
  342.    }
  343.  
  344.    private final void errorString4(int var1, String var2, String var3, String var4, String var5) throws Exception {
  345.       String var6 = ErrorCode.getErrorKey(var1);
  346.       if (((XMLParser)this).errorHandlingEnabled() || !((XMLParser)this).getContinueAfterFatalError() && ((XMLParser)this).isFatal(var6)) {
  347.          String[] var7 = new String[]{var2, var3, var4, var5};
  348.          String var8 = ((XMLParser)this).getErrorMsgString(var6, var7);
  349.          this.handleError(var6, var8);
  350.       }
  351.    }
  352.  
  353.    void TXNamespaceCode(TXElement var1, int var2, int var3) {
  354.       TXAttribute[] var4 = var1.getAttributeArray();
  355.       if (this.isProcessNamespace) {
  356.          try {
  357.             String[] var5 = new String[var4.length];
  358.             AttrPool var6 = ((XMLParser)this).getParserState().getAttrPool();
  359.             var6.getAttributeList(var3);
  360.  
  361.             for(int var7 = 0; var7 < var4.length; ++var7) {
  362.                String var8 = var4[var7].getNodeName();
  363.                int var9 = this.checkNamespace(var1, var8);
  364.                if (var9 != -1) {
  365.                   this.errorString1(var9, var8);
  366.                }
  367.  
  368.                if (var4[var7].getValue().length() == 0 && var8.startsWith("xmlns:")) {
  369.                   this.errorString1(142, var8);
  370.                }
  371.  
  372.                var5[var7] = var4[var7].getNSLocalName();
  373.                String var10 = var4[var7].getNSName();
  374.                if (var10 != null) {
  375.                   for(int var11 = 0; var11 < var7; ++var11) {
  376.                      if (var5[var11].equals(var5[var7])) {
  377.                         String var12 = var4[var11].getNSName();
  378.                         if (var12 != null && var12.equals(var10)) {
  379.                            this.errorString4(144, var4[var7].getNodeName(), var10, var5[var7], var4[var11].getNodeName());
  380.                         }
  381.                      }
  382.                   }
  383.                }
  384.             }
  385.  
  386.             int var14 = this.checkNamespace(var1, var1.getName());
  387.             if (var14 != -1) {
  388.                ((XMLParser)this).error1(var14, var2);
  389.                return;
  390.             }
  391.          } catch (Exception var13) {
  392.             return;
  393.          }
  394.       }
  395.  
  396.    }
  397.  
  398.    int checkNamespace(TXElement var1, String var2) {
  399.       int var3 = var2.indexOf(58);
  400.       if (var3 < 0) {
  401.          return -1;
  402.       } else if (var1.getNamespaceForPrefix(var2.substring(0, var3)) == null) {
  403.          return 136;
  404.       } else {
  405.          return var2.indexOf(58, var3 + 1) >= 0 ? 135 : -1;
  406.       }
  407.    }
  408.  
  409.    // $FF: synthetic method
  410.    static boolean access$0() {
  411.       return false;
  412.    }
  413.  
  414.    // $FF: synthetic method
  415.    static String access$1() {
  416.       return " ALL ";
  417.    }
  418. }
  419.